package com.doublefish.doublefishrobot.utils.db.database;

import android.content.Context;

import com.doublefish.doublefishrobot.utils.db.database.bean.SqlInfoModel;

import java.util.ArrayList;
import java.util.List;

/**
 * 作者:dugaofeng on 2024/10/16 14:37
 */
public class SQLiteSentenceCreatHelper  {

    //数据库名称  一旦创建数据库 不可更改
    private static final String DB_NAME = "df_robot.db";
    //数据库密码  一旦创建数据库 不可更改
    private static final String DB_PWD = "df2024";

    //当前版本号 用于数据库升级
    private static final int dbVersion = 1;

    //数据库表的信息模型
    private List<SqlInfoModel> sqlInfoModelList = null;


    //region 表名

    public static final String TABLE_BIND_DEVICE = "table_bind_device";      //已绑定设备表
    public static final String TABLE_APP_INFO = "table_app_info";            //app信息
    public static final String TABLE_FIRMWARE_INFO = "table_firmware_info";  //固件信息
    public static final String TABLE_CUSTOM_MODEL = "table_custom_model";    //自定义模式
    public static final String TABLE_VIDEO_LIST = "table_video_list";        //视频列表


    //endregion



    //region 建表语句


    /**
     已绑定设备表  table_bind_device
     deviceType: DeviceType_UnKnown = 0, //未知设备
     DeviceType_S8,          //超8 （超8是第三方公司研发的）
     DeviceType_S6           //超6 （超6是双鱼自己研发的）
     */
    private final String TABLE_BIND_DEVICE_CREATE =
            "CREATE TABLE " + TABLE_BIND_DEVICE + " (t_id INTEGER PRIMARY KEY,name TEXT,deviceType INTEGER DEFAULT(0),alias TEXT,mac TEXT,updateTime TIMESTAMP DEFAULT(datetime('now', 'localtime'))); ";


    /**
     * app信息
     * client 平台 int 1.荣耀、小米、OPPO、vivo  2.百度 3.腾讯 4.360  5.华为 10.蒲公英   99.iOS
     * ver  版本  text
     * path 路径  text
     */
    private final String TABLE_APP_INFO_CREATE =
            "CREATE TABLE " + TABLE_APP_INFO + " (t_id INTEGER PRIMARY KEY,client INTEGER DEFAULT(0),client_name TEXT,ver TEXT,path TEXT,updateTime TIMESTAMP DEFAULT (datetime('now', 'localtime'))); ";

    /**
     固件信息
     model  型号 int  1.超8  2.超6
     ver  版本  text
     path 路径  text
     size 大小  INTEGER
     */
    private final String TABLE_FIRMWARE_INFO_CREATE  =
        "CREATE TABLE " + TABLE_FIRMWARE_INFO + " (t_id INTEGER PRIMARY KEY,model INTEGER DEFAULT(0),size INTEGER,ver TEXT,path TEXT,hash TEXT,updateTime TIMESTAMP DEFAULT(datetime('now', 'localtime'))); ";


    /**
     自定义模式
     mode  	自定义模式的编号
     model  型号 int  0.未知 1.超8  2.超6
     name  版本  模式的名字
     script 脚本
     */
    private final String TABLE_CUSTOM_MODEL_CREATE =
            "CREATE TABLE " + TABLE_CUSTOM_MODEL + " (t_id INTEGER PRIMARY KEY,mode INTEGER DEFAULT(0), model INTEGER DEFAULT(0), difficulty INTEGER DEFAULT(99),name TEXT,script TEXT,updateTime TIMESTAMP DEFAULT(datetime('now', 'localtime'))); ";


    /**
     视频信息列表
     name          视频名
     code	       视频的编号
     isHD          是否高清
     isExistVideo  本地是否存在视频  0.无  1.下载中 2.暂停下载  99.已下载完毕
     ver           视频版本
     time          时长
     size          大小
     url           远程url  远程视频地址的播放/下载地址
     localPath     本地视频的地址
     tempPath      远程视频下载到本地的临时缓存地址
     desc          训练内容
     */
    private final String TABLE_VIDEO_LIST_CREATE =
            "CREATE TABLE " + TABLE_VIDEO_LIST + " (t_id INTEGER PRIMARY KEY,name TEXT,code TEXT,isHD INTEGER,isExistVideo INTEGER DEFAULT(0),ver TEXT,time REAL,size INTEGER,url TEXT,localPath TEXT,tempPath TEXT, desc TEXT, updateTime TIMESTAMP DEFAULT(datetime('now', 'localtime')));";


    //endregion


    //获取数据库的路径
    public String dbPath(Context context) {
        return makeDatabaseDir(context) + "/" +DB_NAME;
    }
    //获取数据库的密码
    public String dbPwd() {
        return DB_PWD;
    }

    public int getDbVersion() {
        return dbVersion;
    }

    //获取数据库的表的信息
    public List<SqlInfoModel> getSqlInfoModelList() {
        if (sqlInfoModelList != null)
            return sqlInfoModelList;

        sqlInfoModelList = new ArrayList<>();

        //已绑定设备表  table_bind_device
        SqlInfoModel sqlInfoModel = new SqlInfoModel(TABLE_BIND_DEVICE, TABLE_BIND_DEVICE_CREATE);
        sqlInfoModelList.add(sqlInfoModel);
        //app信息
        sqlInfoModel = new SqlInfoModel(TABLE_APP_INFO, TABLE_APP_INFO_CREATE);
        sqlInfoModelList.add(sqlInfoModel);
        //固件信息
        sqlInfoModel = new SqlInfoModel(TABLE_FIRMWARE_INFO, TABLE_FIRMWARE_INFO_CREATE);
        sqlInfoModelList.add(sqlInfoModel);

        //自定义模式信息
        sqlInfoModel = new SqlInfoModel(TABLE_CUSTOM_MODEL, TABLE_CUSTOM_MODEL_CREATE);
        sqlInfoModelList.add(sqlInfoModel);

        //视频列表
        sqlInfoModel = new SqlInfoModel(TABLE_VIDEO_LIST, TABLE_VIDEO_LIST_CREATE);
        sqlInfoModelList.add(sqlInfoModel);


        return sqlInfoModelList;
    }


    /**
     * （建立各种需要的目录）建立数据库目录
     */
    private String makeDatabaseDir(Context context) {
//        String dirPath = context.getExternalFilesDir(null).toString();
//        // 获取目录
//        String dbDir = dirPath + "/doublefish_db/";
//        File dir = new File(dbDir);
//        if (!dir.exists()) {
//            //创建文件夹
//           boolean b = dir.mkdirs();
//        }
//        return dbDir;

        // FIXME: 2025/5/19 由于平台的隐私 合规问题， 将数据库转移到内部存储，这样不需要存储权限
       return context.getFilesDir().toString();
    }
}
